Load the Tabular Data
# Load the dataset saved in part 2 of the study
df <- readRDS("artifacts/final_data/final_data.rds") %>% setDT()
# Define some global variables that will be referenced throughout the modeling
states <- sort(unique(df$state))
species <- sort(unique(df$common.name))
spec.state <- expand.grid(species=species,
state=states,
stringsAsFactors=F)
# Get a binary target for presence/absence instead of obs. counts for MaxEnt
set(df, j="presence", value=factor(ifelse(df$observations == 0, 0, 1), levels=c(0,1)))
# Save geometry for reference, and remove from dataset
geometry <- df$geometry
df[, `:=` (geometry=NULL)]
# View output
df %>% as_tibble()
Load Rasters
# Load "Feature Engineered" rasters and original rasters into a
# single multi-layer raster by state
r.list <- set_names(states) %>%
purrr::map(~rast(c(paste0("data/final_rasters/", .x, ".tif"),
file.path("artifacts/feature_engineered_final",
paste0(.x, ".tif")))))
plt.x.dims <- list(
NC=24,
CO=21,
VT=15,
OR=18
)
# Get plots as encoded html objects
r.plots <- get.object(
states %>%
set_names() %>%
purrr::map(function(st) {
cat("Getting raster plots for", st, "\n")
p <- get.object(
# Create plots of all rasters, by state; Save plot
purrr::map(names(r.list[[st]]), function(r.name) {
r.df <- terra::as.data.frame(r.list[[st]][[r.name]], xy=T)
p <- ggplot(r.df, aes(x=x, y=y, fill=!!sym(r.name))) +
geom_raster() +
coord_cartesian()
if (r.name != "NLCD_Land") p <- p + scale_fill_viridis_c()
p + labs(title=r.name) + theme(legend.position="none")
}) %>%
ggarrange(plotlist=.,
ncol=4, nrow=ceiling(length(names(r.list[[st]])) / 4)) +
ggtitle(paste0("All Raster Layers for ", st)),
paste0(st, "_rasters.rds"),
"artifacts/plots"
)
# Create a temporary file
tmpfile <- tempfile(fileext = ".svg")
# Save the ggplot to this file
ggsave(filename = tmpfile, p, width = plt.x.dims[[st]], height = 24)
# Use img() function from htmltools to display it within a div
img.src <- paste0("data:image/svg+xml;base64,", base64enc::base64encode(tmpfile))
file.remove(tmpfile)
out <- htmltools::div(id=paste0(st, "_raster_plts"),
style=ifelse(st == states[[1]], "", "display:none;"),
htmltools::tags$img(src=img.src))
gc()
out
}),
"all_rasters_html.rds",
"artifacts/plots"
)
htmltools::div(
htmltools::tags$script(
'$(document).ready(function(){
$("#state_selector").change(function(){
var selectedState = $(this).val();
// Hide all raster plots
$("[id$=_raster_plts]").hide();
// Show the selected raster plot
$("#" + selectedState + "_raster_plts").show();
});
});'
),
htmltools::tags$select(id='state_selector',
lapply(states, function(st) {
htmltools::tags$option(value=st, st)
})),
r.plots
)